﻿namespace Algorithm.LeetCode
{
    /// <summary>
    /// 第二十七题：移除元素
    /// </summary>
    public class No27
    {
        /*
         * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。
         * 
         * 不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
         * 
         * 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
         */

        public static int RemoveElement(int[] nums, int val)
        {
            if ((nums?.Length ?? 0) == 0)
            {
                return 0;
            }
            var result = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] != val)
                {
                    nums[result] = nums[i];
                    result++;
                }
            }
            return result;
        }
    }
}
